/**
 * 数据操作文件模块
 * 职责：操作文件中的数据，只处理数据，不关心业务
 */

var fs = require('fs')
var dbPath = './db.json'

/**
 * 获取所有学生列表
 * callback中的参数
 * 第一个参数是err  成功是null 错误是错误对象
 * 第二个参数是结果  成功是数组 错误是undefind
 */
exports.find = function (callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        callback(null, JSON.parse(data).students)
    })
}

/**
 * 根据id获取学生对象
 * @param {Number} id  学生id 
 * @param {Function} callback 回调函数
 */
exports.findById = function (id, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        var ret = students.find(function (item) {
            return item.id === parseInt(id)
        })
        callback(null, ret)
    })
}

/**
* 添加保存学生
* @student 用户传进来的数据项
* @callback 回调函数
*/
exports.save = function (student, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        // 处理id唯一的，不重复
        student.id = students[students.length - 1].id + 1
        students.push(student)
        var fileData = JSON.stringify({ students: students })
        // 把字符串保存到文件中
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) {
                // 错误就是把错误对象传递给它
                return callback(err)
            }
            // 成功就没错，所以错误对象是null
            callback(null)
        })
    })
}

/**
* 更新学生列表
* @student 用户传进来的数据项
* @callback 回调函数
*/
exports.updateById = function (student, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students

        // 注意，这里记得把id统一为数字类型
        student.id = parseInt(student.id)
        // 你要修改谁，就需要把谁找出来
        var stu = students.find(function (item) {
            return item.id === parseInt(student.id)
        })
        for (let key in student) {
            stu[key] = student[key]
        }
        // 重新
        var fileData = JSON.stringify({ students: students })
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) {
                return callback(err)
            }
            callback(null)
        })
    })
}

/**
* @id 需要删除的数据项id
* 删除学生
*/
exports.deleteById = function (id, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        var deleteId = students.findIndex(function (item) {
            return item.id === parseInt(id)
        })
        students.splice(deleteId, 1)
        var fileData = JSON.stringify({ students: students })
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) {
                return callback(err)
            }
            callback(null)
        })
    })
} 
